package com.apache.oscache;

import com.opensymphony.oscache.general.GeneralCacheAdministrator;
import org.apache.log4j.Logger;

import java.util.Date;
import java.util.Map;

public class BaseOsCache extends GeneralCacheAdministrator {

	private Logger log = Logger.getLogger(BaseOsCache.class);
	//过期时间(单位为秒)
	private int refreshPeriod;
	//关键字前缀字符
	private String keyPrefix;

	private static final long serialVersionUID = -4397192926052141162L;

	public BaseOsCache(String keyPrefix, int refreshPeriod) {
		super();
		this.keyPrefix = keyPrefix;
		this.refreshPeriod = refreshPeriod;
	}

	//添加被缓存的对象
	public void put(String key, Object value) {
		this.putInCache(this.keyPrefix + "_" + key, value);
	}

	//删除被缓存的对象
	public void remove(String key) {
		this.flushEntry(this.keyPrefix + "_" + key);
	}

	//删除所有被缓存的对象
	public void removeAll(Date date) {
		this.flushAll(date);
	}

	public void removeAll() {
		this.flushAll();
	}

	//获取被缓存的对象
	public Object get(String key) {
		try {
			return this.getFromCache(this.keyPrefix + "_" + key, this.refreshPeriod);
		} catch (Exception e) {
			log.equals("获取key=" + key + "缓存信息失败");
			this.cancelUpdate(this.keyPrefix + "_" + key);
		}
		return null;
	}

	/**
	 * 生成缓存的KEY
	 * @param keyPrefix 类名
	 * @param arguments  参数
	 * @return
	 */
	public String getCacheKey(String keyPrefix, Map<String, ?> arguments) {
		StringBuilder sb = new StringBuilder(keyPrefix);
		if (arguments != null && !arguments.isEmpty()) {
			for (String key : arguments.keySet()) {
				sb.append(key + ".").append(arguments.get(key));
			}
		}
		return sb.toString();
	}
}
